package com.linksfield.topup.service;

import com.linksfield.topup.config.dto.ResultDataDto;
import com.linksfield.topup.entity.interfaces.anoverview.admin.fixeddata.request.RequestAdminFixedData;
import com.linksfield.topup.entity.interfaces.anoverview.admin.orderdata.monthdata.request.RequestAdminMonthOrder;
import com.linksfield.topup.entity.interfaces.anoverview.admin.orderdata.yeardata.request.RequestAdminYearOrder;
import com.linksfield.topup.entity.interfaces.anoverview.admin.periodcount.ask.request.RequestAskOrderCount;
import com.linksfield.topup.entity.interfaces.anoverview.admin.periodcount.defaultask.request.RequestDefaultOrderCount;
import com.linksfield.topup.entity.interfaces.anoverview.admin.periodmoney.request.RequestAskOrderMoney;
import com.linksfield.topup.entity.interfaces.anoverview.admin.salesrank.request.RequestAdminSalesRank;
import com.linksfield.topup.entity.interfaces.anoverview.partner.orderlinechart.request.RequestOrderLineChart;
import com.linksfield.topup.entity.interfaces.anoverview.partner.orderpastdata.request.RequestOrderPastData;
import com.linksfield.topup.entity.interfaces.anoverview.partner.orderviewdata.request.RequestOrderViewData;
import com.linksfield.topup.entity.interfaces.anoverview.partner.salesrank.request.RequestSalesRank;
import com.linksfield.topup.entity.interfaces.anoverview.partner.serviceview.request.RequestServiceView;

/**
 * 概览：业务逻辑处理接口
 *
 * @author: lm
 * @date: 2020-03-31 10:33
 */
public interface OverviewService {
    /**
     * 普通企业：套餐总览
     *
     * @param request
     * @param token
     * @return
     */
    ResultDataDto partnerServiceView(RequestServiceView request,
                                     String token);

    /**
     * 普通企业：订单总览，固定数据
     *
     * @param request
     * @param token
     * @return
     */
    ResultDataDto partnerOrderViewData(RequestOrderViewData request,
                                       String token);

    /**
     * 概览：普通用户：订单总览，按照月份返回订单条数，订单金额
     *
     * @param request
     * @param token
     * @return
     */
    ResultDataDto partnerOrderLineChart(RequestOrderLineChart request,
                                        String token);

    /***
     * 普通企业：订单总览，往期按月份数据，图表数据都一致
     * @param request
     * @param token
     * @return
     */
    ResultDataDto partnerOrderView(RequestOrderPastData request,
                                   String token);

    /**
     * 普通企业：套餐销售排行榜Top20
     *
     * @param request
     * @param token
     * @return
     */
    ResultDataDto partnerSalesRank(RequestSalesRank request,
                                   String token);

    /**
     * 管理员：周月订单，周月订单金额：顶部固定数据
     *
     * @param request
     * @param token
     * @return
     */
    ResultDataDto adminFixedData(RequestAdminFixedData request,
                                 String token);

    /**
     * 管理员：企业销售排行Top20
     *
     * @param request
     * @param token
     * @return
     */
    ResultDataDto adminSalesRank(RequestAdminSalesRank request,
                                 String token);

    /**
     * 管理员：按照月份，企业查询：
     * 1，当前选中的年份全年的订单总数，订单总额；
     * 2，当前选中的月份按天的订单总数，订单总额；
     *
     * @param request
     * @param token
     * @return
     */
    ResultDataDto adminWithMonthData(RequestAdminMonthOrder request,
                                     String token);

    /**
     * 管理员：按照年份，企业查询：
     * 1，当前选中的年份全年的订单总数，订单总额；
     * 2，当前选中的年份按月的订单总数，订单总额；
     *
     * @param request
     * @param token
     * @return
     */
    ResultDataDto adminWithYearData(RequestAdminYearOrder request,
                                    String token);

    /**
     * 概览：管理员：默认订单数请求：按月按年查询都一样，给出默认的列表
     * 查询默认套餐：按照规格查询对应的订单数
     *
     * @param request
     * @param token
     * @return
     */
    ResultDataDto defaultOrderCount(RequestDefaultOrderCount request,
                                    String token);

    /**
     * 概览：管理员：实际请求订单数请求：按月按年查询都一样
     * 按照规格查询对应的订单数
     *
     * @param request
     * @param token
     * @return
     */
    ResultDataDto askOrderCount(RequestAskOrderCount request,
                                String token);

    /**
     * 概览：管理员：实际请求订单总金额请求：按月按年查询都一样
     * 按照规格查询对应的订单总金额
     *
     * @param request
     * @param token
     * @return
     */
    ResultDataDto askOrderMoney(RequestAskOrderMoney request,
                                String token);


}
